package cn.antblog.collection;

import java.util.ArrayList;
import java.util.List;

/**
 * @author yangjy
 * @version 1.0
 * @description: arraylist扩容机制
 * @date 2022/7/19 15:31
 */
public class ArrayListExpansion {

    // >> 和 >>> 的区别
    //区别
    //>>的用法
    //">>"在Java中代表带符号右移，正数右移高位补0，负数右移高位补1，例如：
    //2 >> 1 代表的是将二进制10向右右移一位，正数高位补0，结果为01，十进制的结果为1。
    //8 >> 2 代表的是将二进制1000向右右移两位，正数高位补0，结果为0010，十进制的结果为2。
    //-2 >> 1 代表的是将二进制11111111111111111111111111111110（前面的1为符号位）向右右移一位，负数高位补1，结果为11111111111111111111111111111111，十进制的结果为-1。
    //
    //>>>的用法
    //">>>"在Java中代表无符号右移，不管正负高位都补0，对于正数而言，>>和>>>没有区别，例如：
    //8 >>> 2 代表的是将二进制1000向右右移两位，高位补0，结果为0010，十进制的结果为2。
    //-2 >>> 1 代表的是将二进制11111111111111111111111111111110向右右移一位，高位补0，结果为01111111111111111111111111111111，十进制的结果为2147483647。

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        //默认容量10
        list.add("测试1");
        list.add("测试2");
        list.add("测试3");
        list.add("测试4");
        list.add("测试5");
        list.add("测试6");
        list.add("测试7");
        list.add("测试8");
        list.add("测试9");
        list.add("测试10");
        //需要扩容，扩容是扩容之前的1.5倍 ，
        // 因为 oldCapacity+(capacity >> 1 ) = newCapacity
        // 例如：10+10/2 = 5 = 15 所以最新容量为15 扩容了1.5倍
        list.add("测试11");

        int ii = -2;
        int j = -20;
        System.out.println(ii >>> 1);
        System.out.println(ii >> 1);
        System.out.println(j >>> 1);
        System.out.println(j >> 1);


        // TODO Auto-generated method stub
        int[] a = new int[10];
        a[0] = 0;
        a[1] = 1;
        a[2] = 2;
        a[3] = 3;
        System.arraycopy(a, 2, a, 3, 3);
        a[2] = 99;
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i] + " ");
        }
    }
}
